Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Telescript (programming language)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Telescript_(programming_language)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Telescript_programming_language rootpage-Telescript_programming_language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Telescript (programming language)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p><b>Telescript</b> is an <a href="Agent-oriented_programming" title="Agent-oriented programming">agent-oriented programming</a> language written by <a href="General_Magic" title="General Magic">General Magic</a> as part of the overall <a href="Magic_Cap" title="Magic Cap">Magic Cap</a> system. Telescript programs used a modified <a href="C_(programming_language)" title="C (programming language)">C</a>-like <a href="Syntax_(programming_languages)" title="Syntax (programming languages)">syntax</a> known as High Telescript and were compiled to a stack-based language called Low Telescript for execution. Low Telescript ran within <a href="Virtual_machine" title="Virtual machine">virtual machine</a> interpreters, or "Telescript engines", on host computers.
</p><p>The basic model of Telescript is similar to <a href="Java_programming_language" class="mw-redirect" title="Java programming language">Java</a>, and differs primarily in where the applications would run. Java was modelled to make it possible to download Java applications onto any platform and run them locally. Telescript essentially reversed this, allowing end-user equipment with limited capabilities to upload Telescript programs to servers to allow them to take advantage of the server's capabilities. Telescript could even migrate a running program; the language included features to <a href="Marshalling_(computer_science)" title="Marshalling (computer science)">marshal</a> a program's code and <a href="Serialization" title="Serialization">serialized</a> state, transfer it to another Telescript engine (on a device or a server) to continue execution, and finally return to the originating client or server device to deliver its output.
</p><p>General Magic had originally developed as a team within <a href="Apple_Inc." title="Apple Inc.">Apple Inc.</a>, and were spun off in 1990. When they began to generate some press buzz in 1992, Apple decided to enter the same market with their <a href="Apple_Newton" title="Apple Newton">Newton</a> <a href="Tablet_computer" title="Tablet computer">tablet computer</a>. General Magic were unable to find a niche within the market, and Telescript services were soon <a href="Deprecation" title="Deprecation">deprecated</a> in favor of new products unrelated to <a href="Mobile_computing" title="Mobile computing">mobile computing</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>In 1990, <a href="Marc_Porat" title="Marc Porat">Marc Porat</a> convinced then-Apple-CEO <a href="John_Sculley" title="John Sculley">John Sculley</a> that the future of computing lay not in desktop <a href="Personal_computer" title="Personal computer">personal computers</a>, but much smaller portable devices combining computing power, communications systems, and data located on network-accessible servers.<sup id="cite_ref-FOOTNOTELevy1994_1-0" class="reference"><a href="#cite_note-FOOTNOTELevy1994-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> He noted that portable computers would always have less power than the machines they would connect to, and suggested that this be part of the design - instead of trying to build a portable computer that could perform the tasks of a desktop system, the portable device should invisibly use the computational power of the servers to produce a similar result.<sup id="cite_ref-FOOTNOTEClarkKnaster1995_2-0" class="reference"><a href="#cite_note-FOOTNOTEClarkKnaster1995-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-FOOTNOTEKanellos2011_3-0" class="reference"><a href="#cite_note-FOOTNOTEKanellos2011-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p><p>Sculley agreed to allow Porat to begin researching the concepts under the code-name "Pocket Crystal". Key members of the early team were Porat, and famous <a href="Macintosh" class="mw-redirect" title="Macintosh">Macintosh</a> developers <a href="Bill_Atkinson" title="Bill Atkinson">Bill Atkinson</a> and <a href="Andy_Hertzfeld" title="Andy Hertzfeld">Andy Hertzfeld</a>. The team quickly found themselves ignored by upper management and left continually struggling for resources. They approached Sculley again with the idea of spinning off Pocket Crystal as a separate company. Sculley agreed to this, as well as the idea of inviting in new partners on the hardware side. The new company, General Magic (GM), was created in May 1990 with Apple, <a href="Sony" title="Sony">Sony</a> and <a href="Motorola" title="Motorola">Motorola</a> each holding a 10% stake. The company ranks soon filled out with other Macintosh alumni, including <a href="Joanna_Hoffman" title="Joanna Hoffman">Joanna Hoffman</a>, <a href="Susan_Kare" title="Susan Kare">Susan Kare</a>, Dan Winkler, <a href="Bruce_Leak" title="Bruce Leak">Bruce Leak</a> and <a href="Phil_Goldman" title="Phil Goldman">Phil Goldman</a>.<sup id="cite_ref-FOOTNOTELevy1994_1-1" class="reference"><a href="#cite_note-FOOTNOTELevy1994-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>By 1992 GM had signed development agreements with a number companies to work with the Magic Cap environment, including Sony, Motorola, <a href="Matsushita_Electric" class="mw-redirect" title="Matsushita Electric">Matsushita</a>, <a href="Philips" title="Philips">Philips</a>, <a href="British_Telecom" class="mw-redirect" title="British Telecom">British Telecom</a> and <a href="AT%26T_Corporation" title="AT&amp;T Corporation">AT&amp;T Corporation</a>. This generated considerable press "buzz".<sup id="cite_ref-FOOTNOTEKanellos2011_3-1" class="reference"><a href="#cite_note-FOOTNOTEKanellos2011-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Apple had by this time started the <a href="Apple_Newton" title="Apple Newton">Newton project</a>, a design for a larger hand-held tablet-like computer more similar to the full-sized <a href="IPad" title="IPad">iPad</a>. With General Magic's success in the press, they re-positioned the Newton squarely in the same market and rushed it to release in 1993. They also sold their stake in General Magic and sued them. General Magic's partners did not release hardware until 1994, by which time the Newton had essentially defined what a <a href="Personal_digital_assistant" title="Personal digital assistant">personal digital assistant</a> (PDA) should be, and PDA systems were being judged on their <a href="Handwriting_recognition" title="Handwriting recognition">handwriting recognition</a> capabilities. Magic Cap was a <a href="Point_and_click" title="Point and click">point and click</a> interface (similar to <a href="HyperCard" title="HyperCard">HyperCard</a> or the modern <a href="IOS" title="IOS">iOS</a>).<sup id="cite_ref-FOOTNOTEClarkKnaster1995_2-1" class="reference"><a href="#cite_note-FOOTNOTEClarkKnaster1995-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>By 1995 the company was a shell of its former self and most of the original developers had left. In 1996 Steve Markman was hired to take over, and he hired <a href="Kevin_Surace" title="Kevin Surace">Kevin Surace</a> to take the company in a new direction. A new team developed the Portico telephone-based personal assistant system, which lives on today as the basis of <a href="OnStar" title="OnStar">OnStar</a>. The original handheld group was spun off in 1998 as DataRover Mobile Systems Incorporated and later renamed Icras in 2000,<sup id="cite_ref-mirror_4-0" class="reference"><a href="#cite_note-mirror-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> serving a number of <a href="Vertical_market" class="mw-redirect" title="Vertical market">vertical markets</a> before shutting down in 2001.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> The remains of the original company were liquidated in 2004.<sup id="cite_ref-FOOTNOTEKanellos2011_3-2" class="reference"><a href="#cite_note-FOOTNOTEKanellos2011-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Description">Description</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Underlying_concepts">Underlying concepts</h3></div>
<p>Telescript was modelled on the concept of small programs known as <i><a href="Mobile_agent" title="Mobile agent">agents</a></i> that would interact with computing services known as <i>places</i> all of which would run on a cluster of one or more servers that hosted what was called a Telescript cloud. The user's handheld device was one such place, albeit one with limited capabilities. The model assumed that most information and services would be provided by places running on larger server computers hosted by the communications providers like AT&amp;T. Even early documents refer to this as <a href="Cloud_computing" title="Cloud computing">running in the cloud</a>.<sup id="cite_ref-FOOTNOTELevy1994_1-2" class="reference"><a href="#cite_note-FOOTNOTELevy1994-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> User-facing programs would consist of a number of such agents, which might run locally, on the provider's hosts, or even be forwarded to 3rd party servers. To coordinate communications, Telescript also included the concepts of a <i>telename</i> that uniquely identified users, and <i>teleaddresses</i> which identified the device even as it moved between networks.<sup id="cite_ref-FOOTNOTEReference19951_6-0" class="reference"><a href="#cite_note-FOOTNOTEReference19951-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p>For example, consider a shopping application that the user asks to find prices on a new <a href="Barbecue_grill" title="Barbecue grill">barbecue grill</a> they wish to purchase. In a traditional <a href="Client%E2%80%93server_model" title="Client–server model">client–server model</a>, the application would form a number of queries, send them to a number of services, and then collect the results and display them. In the Telescript model, the application would instead build a new agent populated with the data from the request, stamp it with their name and address, and then send that to a store place on a server for processing. That server could then handle the request directly, or hand off the agent to other places, like the actual vendors' places, for further processing. The results could be placed in the agent's internal data fields and sent back through the network to the user's device, or a new "messenger" agent could be spawned to carry only the result data and sent back to minimize network data transfer.<sup id="cite_ref-FOOTNOTEReference19951–2_7-0" class="reference"><a href="#cite_note-FOOTNOTEReference19951–2-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p><p>The model also differs from traditional solutions in the way that data exchange occurs in the case of interacting programs. For instance, if the user chooses to buy one of the barbecues they found in their previous search, in a conventional system the task of filling out the order forms and confirming payment would be accomplished through direct communications between the user's device and the remote server, requiring a "live" communications channel throughout the process. In the Telescript model, a new agent with the information needed to complete the purchase is sent to that vendor's store place, interacts with the store place or agents from the vendor, and then returns with the success or failure. The main communications takes place between the agents and places on the remote server, so communications over the network is required only at the start and end of the process.<sup id="cite_ref-FOOTNOTEReference19952_8-0" class="reference"><a href="#cite_note-FOOTNOTEReference19952-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p><p>Telescript was object-oriented (OO) and used a number of uncommon terms to describe object state and communications. <i>Attributes</i> correspond to what other languages refer to as <a href="Instance_variable" title="Instance variable">instance variables</a> or fields. <a href="Method_(computer_programming)" title="Method (computer programming)">Method</a> calls were known as <i>requests</i>, and the act of running a method's implementation was known as <i>performing</i> it. All such calls always responded with a message indicating success or failure, it was up to the requesting object to optionally trap those and <a href="Exception_handling" title="Exception handling">respond to them</a>. Hints on how to pass the data into and out of method calls were known as <i>constraints</i>, and covered the common "<a href="Evaluation_strategy#Call_by_reference" title="Evaluation strategy">by ref</a>" and "<a href="Evaluation_strategy#Call_by_value" title="Evaluation strategy">by value</a>", among others.<sup id="cite_ref-FOOTNOTEReference19958–12_9-0" class="reference"><a href="#cite_note-FOOTNOTEReference19958–12-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p><p>Telescript was generally <a href="State_(computer_science)" title="State (computer science)">stateless</a> in terms of data lifetime. All data within the program, both instance and local variables, were always serialized. Agents could be invoked or suspended at any instant, and would not lose their state. This same mechanism also allowed agents to be easily communicated between hosts.
</p>
<div class="mw-heading mw-heading3"><h3 id="Syntax_and_layout">Syntax and layout</h3></div>
<p>Although Telescript's control and layout was inspired by C, its precise syntax was considerably different. One obvious difference was the replacement of C-style curly braces with parentheses at the definition level, retaining curly braces for grouping statements within logic and <a href="Control_flow" title="Control flow">flow control</a> statements, and the use of the colon to separate a name from its definition. The following code defines the interface for objects of the type <i>Pie</i>:<sup id="cite_ref-FOOTNOTEGuide19957_10-0" class="reference"><a href="#cite_note-FOOTNOTEGuide19957-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>N 1<span class="cite-bracket">]</span></a></sup>
</p>
<pre> Pie: interface(Object) = (
public
name: String;
initialize: op(name: String);
);
</pre>
<p>Note the use of the keyword <code>op</code>, which corresponds to the <code>function</code> or <code>sub</code> found in other languages. The implementation of the Pie could be used in one or more <code>class</code> objects, which can be organized into <code>modules</code>s in a fashion similar to <a href="Visual_Basic_.NET" class="mw-redirect" title="Visual Basic .NET">Visual Basic .NET</a>'s <code>namespace</code> construct. <code>#include</code> is used to import header files, but the import is local to the <code>modules</code>, not the file as a whole.<sup id="cite_ref-FOOTNOTEGuide19958_12-0" class="reference"><a href="#cite_note-FOOTNOTEGuide19958-12"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</p><p>Telescript's agent and places concepts were invoked simply by sub-classing those two classes, Agent and Place, both of which were subclasses of Process. For code clarity, one could place both of these in a single file, and even gather them into a single module. The following code defines the agents needed to implement a store that sells Pies:<sup id="cite_ref-FOOTNOTEGuide19959_13-0" class="reference"><a href="#cite_note-FOOTNOTEGuide19959-13"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p>
<pre> PieStoreModule: module = (
#include "pie.i"
PieBuyer: class(Agent) = (
public
live: sponsored op() = {
*.go(*.destination);
myPie = place@PieSeller.sellPie();
*.go(*.originPlace);
};
);
PieSeller: class(Place) = (
public
sellPie: op() Pie = {
aPie: Pie | Nil;
aPie = *.getPieFromStock;
if (aPie = nil) {
PieBuyer(*.distributorTicket, Permit(nil));
aPie = *.waitForPie();
return aPie;
};
};
);
);
</pre>
<p>The PieBuyer object, an Agent, contains a single method, <code>live</code>, the standard startup method used by all Agents.<sup id="cite_ref-FOOTNOTEGuide199566_14-0" class="reference"><a href="#cite_note-FOOTNOTEGuide199566-14"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> Simply creating a PieBuyer and invoking it will cause the <code>live</code> method to be called, in a fashion similar to the <code>new</code> operation found in most OO languages, although this method is called after setup. The * replaces what is more commonly implemented as <code>self</code> or <code>Me</code>, referring to the object itself, in this case the PieBuyer agent. The code basically says that when it is created, the object should send itself (*.go) to the location sent to it during creation (*.destination). Once there, it should tell the matching place object, in this case a PieSeller, to sellPie. When that command is complete, the agent will return to its place of origin. The invoking application can then examine the results by inspecting the myPie variable.<sup id="cite_ref-FOOTNOTEGuide19959_13-1" class="reference"><a href="#cite_note-FOOTNOTEGuide19959-13"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p><p>The PieSeller object, a Place, also contains a single method, <code>sellPie</code>. It defines a <a href="Local_variable" title="Local variable">local variable</a> called aPie, defining it to be a Pie object, or "nothing", which is used in the case that there are no pies. It then attempts to set aPie to a value by calling its own getPieFromStock method (not shown here) and then checks if that returned a value. If it did not succeed, for instance, if the stock was empty, it then builds a new PieBuyer object of its own, sends that request off to another shop, and then waits for a response. That shop might forward the request off to another, and so on. When this chain of events concludes, either with a pie or unsuccessfully, the PieSeller place finally returns that to the calling PieBuyer.<sup id="cite_ref-FOOTNOTEGuide19959_13-2" class="reference"><a href="#cite_note-FOOTNOTEGuide19959-13"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p><p>Objects are normally "owned" by the place that created them. Ownership also confers capabilities and security settings. The language can take ownership of an object through the <code>own {}</code> construct, or in this case, use the <code>sponsored</code> keyword to indicate it should run within the ownership of the place it is running in. This might be used, for instance, to grant the agent the ability to see stock in the inventory, values that would otherwise be private. Using <code>sponsored</code> is exactly the same result as placing the code in an <code>own {}</code> block, but allows this to take place in the caller.<sup id="cite_ref-FOOTNOTEGuide199540_15-0" class="reference"><a href="#cite_note-FOOTNOTEGuide199540-15"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup>
</p><p>Telescript includes several built-in collection types, <code>Set</code>, <code>List</code>, <code>Dictionary</code>, and <code>Collection</code>, the last of which is essentially a List with text indexes (one half of a Dictionary). One common source of errors in Telescript was that while a collection as a whole could be passed back in an agent, individual items within it were owned by the place. Thus if one used <code>return MyCollection[someIndex];</code>, it would arrive back on the user's device as null. The solution was additional syntax, the <code>DictOwned</code> and <code>ColOwned</code> hints, which caused the ownership of returned values to be changed on return, and thus be serialized into the results when returning to the original place.<sup id="cite_ref-FOOTNOTEGuide199542_16-0" class="reference"><a href="#cite_note-FOOTNOTEGuide199542-16"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>
</p><p>Sub-classes were known as <i>flavors</i>; the PieBuyer class outlined above is a <i>flavor</i> of Agent. Telescript also included the concept of <a href="Mixin" title="Mixin">mix-in classes</a>, which offered features similar to <a href="Multiple_inheritance" title="Multiple inheritance">multiple inheritance</a> by allowing the creation of classes containing only code that could then be included in other classes. Mix-ins were not flavors.<sup id="cite_ref-FOOTNOTEReference199520_17-0" class="reference"><a href="#cite_note-FOOTNOTEReference199520-17"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup>
</p><p>Like many modern OO languages, Telescript separated interface and implementation, placing these in <code>.i</code> files for the interface, and <code>.t</code> files for the implementation (t as in "t"elescript). Uncommonly, the language also defined a third type of file, <code>.d</code>, which combined multiple <code>.i</code> files together.<sup id="cite_ref-FOOTNOTEGuide19953_18-0" class="reference"><a href="#cite_note-FOOTNOTEGuide19953-18"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> Compiled code was placed in a <code>.s</code> file, which was guided by <a href="Linker_(computing)" title="Linker (computing)">linker</a> instructions in a <code>.l</code> file.<sup id="cite_ref-FOOTNOTEGuide19954_19-0" class="reference"><a href="#cite_note-FOOTNOTEGuide19954-19"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> The <b>External Application Framework</b> allowed <a href="C%2B%2B" title="C++">C++</a> code to be called by Telescript.<sup id="cite_ref-FOOTNOTEGuide19955_20-0" class="reference"><a href="#cite_note-FOOTNOTEGuide19955-20"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Notes">Notes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text">These examples are modified from the originals found in the Guide, correcting a number of errors in syntax and spelling.</span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<p><b>Citations</b>
</p>
<div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-FOOTNOTELevy1994-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-FOOTNOTELevy1994_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-FOOTNOTELevy1994_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-FOOTNOTELevy1994_1-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><a href="#CITEREFLevy1994">Levy 1994</a>.</span>
</li>
<li id="cite_note-FOOTNOTEClarkKnaster1995-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-FOOTNOTEClarkKnaster1995_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-FOOTNOTEClarkKnaster1995_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><a href="#CITEREFClarkKnaster1995">Clark &amp; Knaster 1995</a>.</span>
</li>
<li id="cite_note-FOOTNOTEKanellos2011-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-FOOTNOTEKanellos2011_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-FOOTNOTEKanellos2011_3-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-FOOTNOTEKanellos2011_3-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><a href="#CITEREFKanellos2011">Kanellos 2011</a>.</span>
</li>
<li id="cite_note-mirror-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-mirror_4-0">^</a></b></span> <span class="reference-text">Dan Hanttula, <a rel="nofollow" class="external text" href="http://pencomputing.com/magic_cap/magic_mirror33.html">"Magic Mirror"</a>, <i>Pen Computing</i>, April 2000</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text">Mark Beaulieu, <a rel="nofollow" class="external text" href="https://books.google.com/books?id=O4m0TrliwscC&amp;pg=PA12">"Wireless Internet Applications and Architecture"</a>, Addison-Wesley Professional, 2002, 9780201733549, p. 12.</span>
</li>
<li id="cite_note-FOOTNOTEReference19951-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEReference19951_6-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFReference1995">Reference 1995</a>, p.&nbsp;1.</span>
</li>
<li id="cite_note-FOOTNOTEReference19951–2-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEReference19951–2_7-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFReference1995">Reference 1995</a>, pp.&nbsp;1–2.</span>
</li>
<li id="cite_note-FOOTNOTEReference19952-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEReference19952_8-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFReference1995">Reference 1995</a>, p.&nbsp;2.</span>
</li>
<li id="cite_note-FOOTNOTEReference19958–12-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEReference19958–12_9-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFReference1995">Reference 1995</a>, pp.&nbsp;8–12.</span>
</li>
<li id="cite_note-FOOTNOTEGuide19957-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEGuide19957_10-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;7.</span>
</li>
<li id="cite_note-FOOTNOTEGuide19958-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEGuide19958_12-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;8.</span>
</li>
<li id="cite_note-FOOTNOTEGuide19959-13"><span class="mw-cite-backlink">^ <a href="#cite_ref-FOOTNOTEGuide19959_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-FOOTNOTEGuide19959_13-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-FOOTNOTEGuide19959_13-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;9.</span>
</li>
<li id="cite_note-FOOTNOTEGuide199566-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEGuide199566_14-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;66.</span>
</li>
<li id="cite_note-FOOTNOTEGuide199540-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEGuide199540_15-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;40.</span>
</li>
<li id="cite_note-FOOTNOTEGuide199542-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEGuide199542_16-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;42.</span>
</li>
<li id="cite_note-FOOTNOTEReference199520-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEReference199520_17-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFReference1995">Reference 1995</a>, p.&nbsp;20.</span>
</li>
<li id="cite_note-FOOTNOTEGuide19953-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEGuide19953_18-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;3.</span>
</li>
<li id="cite_note-FOOTNOTEGuide19954-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEGuide19954_19-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;4.</span>
</li>
<li id="cite_note-FOOTNOTEGuide19955-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEGuide19955_20-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFGuide1995">Guide 1995</a>, p.&nbsp;5.</span>
</li>
</ol></div>
<p><b>Bibliography</b>
</p>
<style data-mw-deduplicate="TemplateStyles:r1239549316">
/* start https://en.wikipedia.org/ */


.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}


/* end https://en.wikipedia.org/ */
</style><div class="refbegin" style="">
<ul><li><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFLevy1994" class="citation magazine cs1">Levy, Steven (April 1994). <a rel="nofollow" class="external text" href="https://www.wired.com/1994/04/general-magic/">"Bill and Andy's Excellent Adventure II"</a>. <i>Wired</i>.</cite></li>
<li><cite id="CITEREFClarkKnaster1995" class="citation journal cs1">Clark, Richard; Knaster, Scott; et&nbsp;al. (May 1995). <a rel="nofollow" class="external text" href="http://www.mactech.com/articles/mactech/Vol.11/11.05/MakingMagic/index.html">"A developer's introduction to General Magic and Magic Cap"</a>. <i>MacTech</i>.</cite></li>
<li><cite id="CITEREFKanellos2011" class="citation journal cs1">Kanellos, Michael (18 September 2011). <a rel="nofollow" class="external text" href="https://www.forbes.com/sites/michaelkanellos/2011/09/18/general-magic-the-most-important-dead-company-in-silicon-valley/">"General Magic: The Most Important Dead Company in Silicon Valley?"</a>. <i>Forbes</i>.</cite></li>
<li><cite id="CITEREFReference1995" class="citation book cs1"><a rel="nofollow" class="external text" href="http://bitsavers.informatik.uni-stuttgart.de/pdf/generalMagic/Telescript_Language_Reference_Oct95.pdf"><i>Telescript Language Reference</i></a> <span class="cs1-format">(PDF)</span>. General Magic. October 1995.</cite></li>
<li><cite id="CITEREFGuide1995" class="citation book cs1"><a rel="nofollow" class="external text" href="http://www.cis.upenn.edu/~bcpierce/courses/629/papers/Telescript-ProgGuide.ps.gz"><i>Telescript Programming Guide</i></a>. General Magic. 1995.</cite></li></ul>
</div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-06-10" href="https://en.wikipedia.org/wiki/?title=Telescript_(programming_language)&amp;oldid=1294940683">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>